package com.safezh;

import com.safezh.handler.CustomBeanListHandler;
import com.xiaoleilu.hutool.db.SqlRunner;
import com.xiaoleilu.hutool.db.dialect.Dialect;
import com.xiaoleilu.hutool.db.handler.BeanListHandler;

import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.List;

/**
 * @author Administrator
 * @version 1.0
 * @ClassName:CustomSqlRunner
 * @Description:TODO(用一句话描述该文件做什么)
 * @date:2018年01月04日
 * @since JDK 1.7
 */
public class CustomSqlRunner extends SqlRunner {
    /**
     * 构造，从DataSource中识别方言
     *
     * @param ds 数据源
     */
    public CustomSqlRunner(DataSource ds) {
        super(ds);
    }

    /**
     * 构造
     *
     * @param ds      数据源
     * @param dialect 方言
     */
    public CustomSqlRunner(DataSource ds, Dialect dialect) {
        super(ds, dialect);
    }

    /**
     * 构造
     *
     * @param ds              数据源
     * @param driverClassName 数据库连接驱动类名，用于识别方言
     */
    public CustomSqlRunner(DataSource ds, String driverClassName) {
        super(ds, driverClassName);
    }

    /**
     * 创建SqlRunner<br>
     * 会根据数据源连接的元信息识别目标数据库类型，进而使用合适的数据源
     * @param ds 数据源
     * @return SqlRunner
     */
    public static CustomSqlRunner create(DataSource ds) {
        return ds == null ? null : new CustomSqlRunner(ds);
    }

    /**
     * 查询
     *
     * @param <T>       结果集需要处理的对象类型
     * @param sql       查询语句
     * @param beanClass 元素Bean类型
     * @param params    参数
     * @return 结果对象
     * @throws SQLException SQL执行异常
     * @since 3.2.2
     */
    @Override
    public <T> List<T> query(String sql, Class<T> beanClass, Object... params) throws SQLException {
        return query(sql, new CustomBeanListHandler<T>(beanClass), params);
    }

}
